/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ComExWeb.dominio;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *
 * @author 
 */
@Entity
@Table(schema = "desenv", name = "OFERTA")
@NamedQueries({
    @NamedQuery(name = "Oferta.findAll", query = "SELECT o FROM Oferta o")})
public class Oferta implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "ID_OFERTA")
    //@GeneratedValue(generator = "seq")
    //@SequenceGenerator(name = "seq", sequenceName = "SEQ1", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long idOferta;
    @Column(name = "TITULO")
    //@NotEmpty(message="Nome não informado")
    private String titulo;
    @Column(name = "DESCRICAO")
    private String descricao;
    @Column(name = "DESCRICAO_ABREVIADA")
    private String descricaoAbreviada;

    @Column(name = "VL_INTEGRAL")
    private Number vlIntegral;
    @Column(name = "VL_DESCONTO")
    private Number vlDesconto;
    @Column(name = "NR_QUANTIDADE_MAXIMA")
    private Integer nrQuantidadeMaxima;
    @Column(name = "NR_QUANTIDADE_MINIMA")
    private Integer nrQuantidadeMinima;
    @Column(name = "NR_QUANTIDADE")
    private Integer nrQuantidade;

    @JoinColumn(name = "PESSOA", referencedColumnName = "ID_PESSOA")
    @ManyToOne(optional = false)
    @NotNull(message = "Empresa não informada")
    private Pessoa pessoaOferta;
    @Column(name = "DT_CADASTRO")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dtCadastro;
    @Column(name = "DT_INICIO")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dtInicio;
    @Column(name = "DT_FIM")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dtFim;
    @Column(name = "DT_VALIDADE")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dtValidade;

       //lista de Regulamentos
    @OneToMany(mappedBy="oferta", cascade={CascadeType.MERGE,CascadeType.PERSIST})
    private List<Regulamento> regulamentos = new ArrayList<Regulamento>();

    //lista de imagens
   @OneToMany(mappedBy="oferta", cascade={CascadeType.MERGE,CascadeType.PERSIST})
    private List<Imagem> imagens = new ArrayList<Imagem>();

    @ManyToMany
    @JoinTable(schema = "desenv", name = "OFERTA_CIDADE",
    joinColumns =
    @JoinColumn(name = "OFERTA"),
    inverseJoinColumns =
    @JoinColumn(name = "CIDADE"))
    private List<Cidade> cidades = new ArrayList<Cidade>();

    public Oferta() {
    }

    public List<Regulamento> getRegulamentos() {
        return regulamentos;
    }

    public void setRegulamentos(List<Regulamento> regulamentos) {
        this.regulamentos = regulamentos;
    }

    

    public Date getDtValidade() {
        return dtValidade;
    }

    public void setDtValidade(Date dtValidade) {
        this.dtValidade = dtValidade;
    }

    public Oferta(Long idOferta) {
        this.idOferta = idOferta;
    }

    public Long getIdOferta() {
        return idOferta;
    }
    private static final Logger log = LoggerFactory.getLogger(Oferta.class);

    public void setIdOferta(Long idOferta) {

        this.idOferta = idOferta;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public List<Cidade> getCidades() {
        return cidades;
    }

    public void setCidades(List<Cidade> cidades) {
        this.cidades = cidades;
    }

    public String getDescricaoAbreviada() {
        return descricaoAbreviada;
    }

    public void setDescricaoAbreviada(String descricaoAbreviada) {
        this.descricaoAbreviada = descricaoAbreviada;
    }

    public Date getDtCadastro() {
        return dtCadastro;
    }

    public void setDtCadastro(Date dtCadastro) {
        this.dtCadastro = dtCadastro;
    }

    public Date getDtFim() {
        return dtFim;
    }

    public void setDtFim(Date dtFim) {
        this.dtFim = dtFim;
    }

    public Date getDtInicio() {
        return dtInicio;
    }

    public void setDtInicio(Date dtInicio) {
        this.dtInicio = dtInicio;
    }

    public List<Imagem> getImagens() {
        return imagens;
    }

    public void setImagens(List<Imagem> imagens) {
        this.imagens = imagens;
    }

    public Integer getNrQuantidade() {
        return nrQuantidade;
    }

    public void setNrQuantidade(Integer nrQuantidade) {
        this.nrQuantidade = nrQuantidade;
    }

    public Integer getNrQuantidadeMaxima() {
        return nrQuantidadeMaxima;
    }

    public void setNrQuantidadeMaxima(Integer nrQuantidadeMaxima) {
        this.nrQuantidadeMaxima = nrQuantidadeMaxima;
    }

    public Integer getNrQuantidadeMinima() {
        return nrQuantidadeMinima;
    }

    public void setNrQuantidadeMinima(Integer nrQuantidadeMinima) {
        this.nrQuantidadeMinima = nrQuantidadeMinima;
    }

    public Pessoa getPessoaOferta() {
        return pessoaOferta;
    }

    public void setPessoaOferta(Pessoa pessoaOferta) {
        this.pessoaOferta = pessoaOferta;
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public Number getVlDesconto() {
        return vlDesconto;
    }

    public void setVlDesconto(Number vlDesconto) {
        this.vlDesconto = vlDesconto;
    }

    public Number getVlIntegral() {
        return vlIntegral;
    }

    public void setVlIntegral(Number vlIntegral) {
        this.vlIntegral = vlIntegral;
    }

    
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idOferta != null ? idOferta.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Oferta)) {
            return false;
        }
        Oferta other = (Oferta) object;
        if ((this.idOferta == null && other.idOferta != null) || (this.idOferta != null && !this.idOferta.equals(other.idOferta))) {
            return false;
        }
        return true;
    }
}
